package com.ruoyi.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.entity.StyleTemplate;
import com.ruoyi.mapper.StyleTemplateMapper;
import com.ruoyi.service.StyleTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 风格模板服务实现类
 * 提供风格模板的增删改查等基础服务实现
 *
 * @author ruoyi
 */
@Service
@Slf4j
public class StyleTemplateServiceImpl extends ServiceImpl<StyleTemplateMapper, StyleTemplate> implements StyleTemplateService {

    /**
     * 获取所有启用的风格模板列表
     * 按照排序顺序升序排列
     *
     * @return 启用状态的风格模板列表
     */
    @Override
    public List<StyleTemplate> listEnabledTemplates() {
        LambdaQueryWrapper<StyleTemplate> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StyleTemplate::getStatus, true)
                .orderByAsc(StyleTemplate::getSortOrder);
        return list(wrapper);
    }

    /**
     * 根据ID获取风格模板详情
     *
     * @param id 模板ID
     * @return 风格模板详情，如果不存在则返回null
     */
    @Override
    public StyleTemplate getTemplateById(Integer id) {
        return getById(id);
    }

    /**
     * 创建风格模板
     * 自动设置创建时间、更新时间和默认状态
     *
     * @param template 风格模板信息
     * @return 创建是否成功
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean createTemplate(StyleTemplate template) {
        template.setCreatedAt(LocalDateTime.now());
        template.setUpdatedAt(LocalDateTime.now());
        // 设置默认启用状态
        if (template.getStatus() == null) {
            template.setStatus(true);
        }
        return save(template);
    }

    /**
     * 更新风格模板
     * 自动更新更新时间
     *
     * @param template 风格模板信息
     * @return 更新是否成功
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateTemplate(StyleTemplate template) {
        template.setUpdatedAt(LocalDateTime.now());
        return updateById(template);
    }

    /**
     * 删除风格模板
     *
     * @param id 模板ID
     * @return 删除是否成功
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteTemplate(Integer id) {
        return removeById(id);
    }

    /**
     * 更新风格模板状态
     * 自动更新更新时间
     *
     * @param id 模板ID
     * @param status 是否启用
     * @return 更新是否成功
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean updateTemplateStatus(Integer id, Boolean status) {
        StyleTemplate template = getById(id);
        if (template == null) {
            log.warn("风格模板不存在，id={}", id);
            return false;
        }
        template.setStatus(status);
        template.setUpdatedAt(LocalDateTime.now());
        return updateById(template);
    }
}
